# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import fields, models

import base64


def get_content_type(filename):
    types = {'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
             'xls': 'application/vnd.ms-excel',
             'csv': 'text/csv'}
    content_type = types[filename.split('.')[-1]]
    return content_type


class Import(models.TransientModel):
    _inherit = 'base_import.import'

    # 可以使用 /base_import/set_file 官方接口
    # 因此这个不再需要了, 仅在sp3 中 使用一次, 2020-10-21
    def write_file(self, filename, base64str, file_type=None):
        values = {'file': base64.b64decode(bytes(base64str, encoding='utf8')),
                  'file_name': filename,
                  'file_type': file_type or get_content_type(filename)}
        return self.write(values)


def _load_records_get_data_list(self, data_list, unique_fields=None, get_values=None):

    # get_values 的 例子
    # 解决  m2o2_id 的 name 不唯一的问题
    # def get_values(values):
    #     values2 = values.copy()
    #     domain = [('name', '=', values['name']),
    #               ('m2o_id', '=', values['m2o2_id'])]
    #     m2o2_id = self.env['res.xxxxx'].search(domain, limit=1)
    #     values2.update({'m2o2_id': m2o2_id.id})
    #     return values2

    if not unique_fields:
        unique_fields = ['name']

    if not isinstance(unique_fields, list):
        unique_fields = [unique_fields]

    def fn(data):
        print('----in 1 -----,', data)
        xml_id = data.get('xml_id')
        if xml_id:
            return data

        values = data['values'].copy()

        if 'id' in values:
            return data

        if get_values:
            values = get_values(values)
            data['values'] = values

        for field in unique_fields:
            if field not in values:
                print('----in 4 -field-f2---,', field)
                return data

        print('----in 5 ----,')
        domain = [(field, '=', values[field]) for field in unique_fields]
        print('----in 6 --domain--,', domain)
        rec = self.search(domain, limit=1)

        if rec:
            print('----in 7 --domain--,')
            values.update({'id': rec.id})

        data['values'] = values
        print('----in 8 --domain--,', values, data)
        return data

    print('----1-----,', data_list, unique_fields)
    data_list2 = [fn(data) for data in data_list]
    print('----2-----,', data_list2, unique_fields)
    return data_list2
